﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;

namespace T4_Eind_programma
{
    public partial class OrderScherm : Form
    {
        #region Variable Declaration

        private Controller mijnController;

        #endregion Variable Declaration

        #region Constructor

        public OrderScherm(Controller mijnController)
        {
            InitializeComponent();
            this.mijnController = mijnController;
            dataGridViewOrder.DataSource = mijnController.OrderList;
            mijnController.OrderList.ListChanged += orderList_ListChanged;
            dataGridViewOrder.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridViewOrder.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
        }

        #endregion Constructor

        #region Button Clicks

        private void btnDown_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count > 0 && dataGridViewOrder.SelectedRows[0].Index != dataGridViewOrder.Rows[dataGridViewOrder.Rows.Count - 1].Index
                 )
            {
                int huidigIndex = dataGridViewOrder.SelectedRows[0].Index;
                int nieuweIndex = huidigIndex + 1;
                Order temporder = mijnController.OrderList[huidigIndex];
                Order temporderNieuw = mijnController.OrderList[nieuweIndex];
                mijnController.OrderList[huidigIndex] = temporderNieuw;
                mijnController.OrderList[nieuweIndex] = temporder;
            }
        }

        private void btnPauze_Click(object sender, EventArgs e)
        {
        }

        private void btnToevoegen_Click(object sender, EventArgs e)
        {
            if (textToevoegen.Text.Length > 0)
            {
                int nieuwnummer = 0;
                foreach (Order order in mijnController.OrderList)
                {
                    if (order.Nummer >= nieuwnummer)
                    {
                        nieuwnummer = order.Nummer + 1;
                    }
                }

                foreach (Order order in mijnController.MijnIO.ReadOrderList(mijnController.MijnIO.Location, mijnController.MijnIO.FileNameRemovedMengbatches))
                {
                    if (order.Nummer >= nieuwnummer)
                    {
                        nieuwnummer = order.Nummer + 1;
                    }
                }

                if (mijnController.OrderList.Count >= 1)
                {
                    mijnController.OrderList.Add(new Order(nieuwnummer, textToevoegen.Text, false));
                }
                else
                {
                    mijnController.OrderList.Add(new Order(nieuwnummer, textToevoegen.Text, false));
                }
                InitializeToevoegen(nieuwnummer);
                mijnController.MijnIO.WriteOrderList(mijnController.MijnIO.Location, mijnController.MijnIO.FileNameOrder, mijnController.OrderList);
            }
            else
            {
                MessageBox.Show("Vul de naam van de besteller in.", "", MessageBoxButtons.OK);
            }
        }

        private void btnUitvoeren_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count > 0)
            {
                Order order = mijnController.OrderList.Where(orderItem => orderItem.Nummer == Convert.ToInt32(dataGridViewOrder.SelectedRows[0].Cells[0].Value)).Single();
                if (order.MengbatchList.Count > 0)
                {
                    mijnController.Demo(order.MengbatchList[0]);
                    MessageBox.Show("Plaats vat aan het begin van de band.", "", MessageBoxButtons.OK);
                }
                else
                {
                    MessageBox.Show("Geen mengbatch aanwezig in order, voeg een mengbatch toe.", "", MessageBoxButtons.OK);
                }
            }
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count > 0 && dataGridViewOrder.SelectedRows[0].Index != dataGridViewOrder.Rows[0].Index
     )
            {
                int huidigIndex = dataGridViewOrder.SelectedRows[0].Index;
                int nieuweIndex = huidigIndex - 1;
                Order temporder = mijnController.OrderList[huidigIndex];
                Order temporderNieuw = mijnController.OrderList[nieuweIndex];
                mijnController.OrderList[huidigIndex] = temporderNieuw;
                mijnController.OrderList[nieuweIndex] = temporder;
            }
        }

        private void btnVerwijderen_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count == 1)
            {
                BindingList<Order> tempList = new BindingList<Order>();

                Order order = mijnController.OrderList.Where(orderItem => orderItem.Nummer == Convert.ToInt32(dataGridViewOrder.SelectedRows[0].Cells[0].Value)).Single();
                tempList.Add(order);
                mijnController.MijnIO.WriteOrderList(mijnController.MijnIO.Location, mijnController.MijnIO.FileNameRemovedMengbatches, tempList);
                mijnController.OrderList.Remove(order);
            }
        }

        #endregion Button Clicks

        private void InitializeToevoegen(int nummer)
        {
            Order order = mijnController.OrderList.Where(orderItem => orderItem.Nummer == nummer).Single();
            BatchOverzicht mijnBatchScherm = new BatchOverzicht(order);
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosing);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void OnSearchClosing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            this.Enabled = true;
            mijnController.MijnIO.WriteOrderList(mijnController.MijnIO.Location, mijnController.MijnIO.FileNameOrder, mijnController.OrderList);
        }

        private void orderList_ListChanged(object sender, ListChangedEventArgs e)
        {
            dataGridViewOrder.DataSource = typeof(List<>);
            dataGridViewOrder.DataSource = mijnController.OrderList;
            dataGridViewOrder.AutoResizeColumns();
            dataGridViewOrder.Refresh();
        }

        private void dataGridViewOrder_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1 && e.ColumnIndex != -1)
            {
                Order order = mijnController.OrderList.Where(orderItem => orderItem.Nummer == Convert.ToInt32(dataGridViewOrder.SelectedRows[0].Cells[0].Value)).Single();
                BatchOverzicht mijnBatchScherm = new BatchOverzicht(order);
                mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosing);
                this.Enabled = false;
                mijnBatchScherm.Show();
            }
        }
    }
}